/**
 * 聊天会话
 */
export class Chat {
	constructor(id, name, avatar, unReadCount, lastMessage, mobile, email, type) {
		this.id = id;
		this.name = name;
		this.avatar = avatar;
		this.unReadCount = unReadCount;
		this.lastMessage = lastMessage;
		this.mobile = mobile;
		this.email = email;
		this.type = type;
	}
}

/**
 * 图片加载完成处理函数
 * @param arr 图片的src集合
 * @returns {Promise}
 */
function preloadImages(arr) {
	let loadedImage = 0;
	let images = [];
	return new Promise(function(resolve, reject) {
		for(let i = 0; i < arr.length; i++) {
			images[i] = new Image();
			images[i].src = arr[i];
			images[i].onload = function() {
				loadedImage++;
				if(loadedImage === arr.length) {
					resolve();
				}
			};
			images[i].onerror = function() {
				reject();
			};
		}
	});
}

/**
 * 图片加载完成，聊天对话框scroll拉到最下
 * @param id 容器id
 */
export function imageLoad(id, type) {
	scrollBottom(id);
	let messageBox = document.getElementById(id);
	if(messageBox) {
		let images = messageBox.getElementsByTagName("img");
		if(images) {
			let arr = [];
			for(let i = 0; i < images.length; i++) {
				arr[i] = images[i].src;
			}
			if(!type) {
				preloadImages(arr)
					.then(() => {
						scrollBottom(id);
					})
					.catch(function() {
						scrollBottom(id);
					});
			}
		}
	}
}

/**
 * 滚动条到最下方
 * @param id 容器id
 */
export function scrollBottom(id) {
	let div = document.getElementById(id);
	if(div) {
		setTimeout(() => {
			div.scrollTop = div.scrollHeight;
		}, 0)
	}
}

export function transform(content) {
	// 支持的html标签
	let html = function(end) {
		return new RegExp(
			"\\n*\\[" +
			(end || "") +
			"(code|pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)]\\n*",
			"g"
		);
	};
	// if(content) {
	// 	content = content
	// 		.replace(/&(?!#?[a-zA-Z0-9]+;)/g, "&amp;")
	// 		.replace(/</g, "&lt;")
	// 		.replace(/>/g, "&gt;")
	// 		.replace(/'/g, "&#39;")
	// 		.replace(/"/g, "&quot;") // XSS
	// 		//.replace(/@(\S+)(\s+?|$)/g, '@<a href="javascript:;">$1</a>$2')//@某人

	// 		.replace(/img\[([^\s]+?)]/g, function(img) {
	// 			// 转义图片
	// 			let href = img.replace(/(^img\[)|(]$)/g, "");
	// 			return(
	// 				'<img class="message-img" src="' + href + '" alt="消息图片不能加载">'
	// 			);
	// 		})
	// 		.replace(/file\([\s\S]+?\)\[[\s\S]*?]/g, function(str) {
	// 			// 转义文件
	// 			let href = (str.match(/file\(([\s\S]+?)\)\[/) || [])[1];
	// 			let text = (str.match(/\)\[([\s\S]*?)]/) || [])[1];
	// 			if(!href) return str;
	// 			return(
	// 				'<a class="message-file" href="' +
	// 				href +
	// 				'"><i class="ivu-icon ivu-icon-md-arrow-down"></i>' +
	// 				(text || href) +
	// 				"</a>"
	// 			);
	// 		})
	// 		.replace(/audio\[([^\s]+?)]/g, function(audio) {
	// 			// 转义音频
	// 			return(
	// 				'<div class="message-audio" data-src="' +
	// 				audio.replace(/(^audio\[)|(]$)/g, "") +
	// 				'"><i class="layui-icon">&#xe652;</i><p>音频消息</p></div>'
	// 			);
	// 		})
	// 		.replace(/video\[([^\s]+?)]/g, function(video) {
	// 			// 转义视频
	// 			return(
	// 				'<div class="message-video"  data-src="' +
	// 				video.replace(/(^video\[)|(]$)/g, "") +
	// 				'"><i class="layui-icon">&#xe652;</i></div>'
	// 			);
	// 		})
	// 		.replace(/a\([\s\S]+?\)\[[\s\S]*?]/g, function(str) {
	// 			// 转义链接
	// 			let href = (str.match(/a\(([\s\S]+?)\)\[/) || [])[1];
	// 			let text = (str.match(/\)\[([\s\S]*?)]/) || [])[1];
	// 			if(!href) return str;
	// 			return(
	// 				'<a href="' + href + '" target="_blank">' + (text || href) + "</a>"
	// 			);
	// 		})
	// 		.replace(html(), "<$1 $2>")
	// 		.replace(html("/"), "</$1>") // 转移HTML代码
	// 		.replace(/\n/g, "<br>"); // 转义换行
	// }
	return content;
}

export const ChatListUtils = {
	listKey: "_chatList",
	setChatList: function(userId, chatList) {
		localStorage.setItem(userId + this.listKey, JSON.stringify(chatList));
	},
	//从缓存中获取已经保存的会话
	getChatList: function(userId) {
		let str = localStorage.getItem(userId + this.listKey);
		if(!str) {
			return [];
		}
		return JSON.parse(str);
	},
	//删除聊天会话框
	delChat: function(userId, chat) {
		let tempChatList = [];
		for(let item of this.getChatList(userId)) {
			if(String(item.id) !== String(chat.id)) {
				tempChatList.push(item);
			}
		}
		// 放入缓存
		this.setChatList(userId, tempChatList);
		return tempChatList;
	},
	/**
	 * 刷新会话列表
	 * @param self 当前对象
	 * @param user 用户
	 * @param host 主机名
	 * @param type 0 单聊 1 群聊
	 * @returns {Chat} 当前会话
	 */
	resetChatList: function(self, user, type) {
		console.log("user:" + user.name);
		let chatList = this.getChatList(self.$store.state.im.user.userId);
		// 删除当前用户已经有的会话
		let newChatList = chatList.filter(function(element) {
			return String(element.id) !== String(user.userId);
		});

		// 重新添加会话，放到第一个
		let chat = new Chat(
			user.userId,
			user.name,
			user.avater,
			0,
			"",
			'',
			'',
			type,
		);
		newChatList.unshift(chat);
		// 存储到localStorage 的 chatList
		this.setChatList(self.$store.state.im.user.userId, chatList);
		self.$store.commit("setChatList", newChatList);
		return chat;
	}
};
//信息的类型 MSG_PING 心跳 、MSG_READY 链接就绪  MSG_MESSAGE 消息
export const MessageInfoType = {
	MSG_PING: "0",
	MSG_READY: "1",
	MSG_MESSAGE: "2"
};
//信息的目标类型 FRIEND 私聊 、CHAT_GROUP 群聊
export const MessageTargetType = {
	FRIEND: "0",
	CHAT_GROUP: "1"
};

/**
 * 退出登录
 * @param self vue this对象
 */
export function logout(self) {
	self.$store.commit("closeConnect");
	self.$store.commit("clear");
}

export const ErrorType = {
	TIMEOUT_ERROR: 9, //超时
	TOKEN_ERROR: 401, //token 失效错误
	PARAM_ERROR: 400, //参数错误
	FLUSH_TOKEN_ERROR: 7, //刷新token错误
	SERVER_ERROR: 500, //服务器错误
	NET_ERROR: "TypeError: Failed to fetch" //网络链接不通
};